package gpt

import (
	"backend/conf"
	"backend/controllers"
	"backend/models"
	"encoding/json"
	"strings"
)

type GenOutlineRequest struct {
	Topic   string `json:"topic"`
	Sponsor string `json:"sponsor"`
}

// 请求体数据
/*type GenOutlineRequest struct {
	Msg string `json:"message"`
}*/

func (this *Controller) GenOutline() {
	var request GenOutlineRequest
	json.NewDecoder(this.Ctx.Request.Body).Decode(&request)

	prompt := conf.GetOutlinePromptTemplate()
	prompt = strings.ReplaceAll(prompt, "{{topic}}", request.Topic)
	prompt = strings.ReplaceAll(prompt, "{{sponsor}}", request.Sponsor)

	outline_str := ``
	debug := 0
	if debug == 1 {
		outline_str = `<slides>
		<section class='cover'>
		<p>我为什么玩明日方舟</p>
		<p>汇报人：dhf</p>
		</section>
		<section
		class='catalog'>
		<p>目录</p>
		<p>1. 玩法简介</p>
		<p>2. 游戏特色</p>
		<p>3. 社交互动</p>
		<p>4. 个人体验</p>
		<p>5. 结束语</p>
		</section>
		<section class='content'>
		<p>社交互动</p>
		<p>1. 分享自己在游戏中的心得体会有助于与其他玩家建立更紧密的联系，增强游戏体验。</p>
		<p>2. 参与游戏社区的互动活动，不仅可以赢取奖励，还能结交志同道合的朋友。</p>
		<p>3. 玩家之间的互动是游戏中不可或缺的一部分，可以互相帮助、交流游戏心得、组队挑战副本等。</p>
		<p>4. 玩家之间的互动是游戏中不可或缺的一部分，可以互相帮助、交流游戏心得、组队挑战副本等。</p>
		<p>5. 玩家之间的互动是游戏中不可或缺的一部分，可以互相帮助、交流游戏心得、组队挑战副本等。</p>
		</section>
		</slides>`
	} else {
		var err error
		// 调用chatGPT进行PPT生成，通过xml模板进行生成
		outline_str, err = RequestGpt(prompt, SlidesXML{}) //<slide></slide>
		// 先默认err为nil, 给定默认outline
		// err = nil
		// outline_str = "<slides> <section class='cover'> <p>我喜欢水果</p> <p>汇报人:www</p> </section> <section class='catalog'> <p>目录</p> <p>水果的种类</p> <p>水果的营养价值</p> <p>如何选择新鲜水果</p> </section> <section class='content'> <p>水果的种类</p> <p>从热带水果到温带水果,世界上有成千上万种不同的水果,每一种都有其独特的风味和营养价值</p> </section> <section class='content'> <p>水果的营养价值</p> <p>水果富含维生素、矿物质、纤维素等对人体有益的营养成分,适量食用可以促进健康,预防疾病</p> </section> <section class='content'> <p>如何选择新鲜水果</p> <p>选择新鲜水果时,应关注其外观、质地和气味,一般而言,颜色鲜亮、表皮光滑、无明显损伤、香味浓郁的水果较为新鲜</p> </section> </slides>"
		if err != nil {
			this.Data["json"] = controllers.MakeResponse(controllers.Err, err.Error(), outline_str)
			this.ServeJSON()
			return
		}
	}

	outline, err := models.CreateOutline(outline_str)
	if err != nil {
		this.Data["json"] = controllers.MakeResponse(controllers.Err, err.Error(), outline)
		this.ServeJSON()
		return
	}

	this.Data["json"] = controllers.MakeResponse(controllers.OK, "success", outline)
	this.ServeJSON()
}
